export default function nestTokens(tokens) {
    let nestedTokens = [];
    // 收集器，指向nestedTokens结果数组，引用类型值，所以指向的是同一个数组
    // 收集器的指向会变化，当遇见的时候，收集器会指向这个token的下标为2的新数组
    let collector = nestedTokens;
    // 栈结构，存放小token，栈顶（靠近端口，最新进入的）的tokens数组中当前操作的这个tokens小数组
    let sections = [];
    let token;
    for (let i = 0; i < tokens.length; i++) {
        token = tokens[i]
        switch (token[0]) {
            case "#":
                // 将此token放入收集器中
                collector.push(token);
                // 入栈
                sections.push(token)
                // 收集器要切换。给token添加下标为2的项，并让收集器指向它
                collector = token[2] = []
                break;
            case "/":
                // 出栈，pop()会返回刚刚弹出的项
                sections.pop();
                // 改变收集器为栈结构收尾（队尾是栈顶），即下标为2的对象
                collector = sections.length>0?sections[sections.length-1][2]:nestedTokens;
                break;
            default:
                collector.push(token)
        }
    }
    return nestedTokens;
}
